package com.Algorithm.HUAWEI.three20220323;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Parameter;
import java.util.HashSet;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: zjz
 * @Date: 2022/04/15/15:35
 * @Description:
 * @Target:
 */
public class 完全数计算 {
    /*
    *
    * 描述
    完全数（Perfect number），又称完美数或完备数，是一些特殊的自然数。
    它所有的真因子（即除了自身以外的约数）的和（即因子函数），恰好等于它本身。
    例如：28，它有约数1、2、4、7、14、28，除去它本身28外，其余5个数相加，1+2+4+7+14=28。

    输入n，请输出n以内(含n)完全数的个数。

    数据范围： 1≤n≤5×10
    5

    输入描述：
    输入一个数字n

    输出描述：
    输出不超过n的完全数的个数

    示例1
    输入：
    1000

    输出：
    3

    *
    * */


    public static void main(String[] args) throws IOException {
        int num = Integer.valueOf(new BufferedReader(new InputStreamReader(System.in)).readLine());
        int count = 0;
        for (int i = 1; i <= num; i++) {
            if (isPerfect(i)){
                System.out.println(i);
                count++;
            }
        }
        System.out.println(count);

        System.out.println("----------");
        process(num);

    }


    // 真因子--
    static boolean isPerfect(int num){
        if (num==1||num==0){
            return false;
        }

        HashSet<Integer> set = new HashSet();
        for (int i = 1; i < Math.sqrt(num)+1; i++) {
            if (num%i==0){
                set.add(i);
                if (i!=1){
                    set.add(num/i);
                }

            }
        }


        for (Integer integer : set) {
            num-=integer;
        }

        if (num==0){
            return true;
        }else {
            return false;
        }

    }



    static void process(int Num){
        int count = 0;
        for (int num = 2; num < Num; num++) {
            int sum = num;
            for (int i = 1; i <= Math.sqrt(num); i++) {
                if (num%i==0){
                   sum-=i;
                    if (i!=1){
                     sum-=(num/i);
                    }

                }
            }


            if (sum==0){
                count++;
            }
        }


        System.out.println(count);


    }
}
